package com.ms.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ms.domain.dto.AlbumCreateDTO;
import com.ms.domain.dto.AlbumUpdateDTO;
import com.ms.domain.entity.Album;
import com.ms.domain.entity.Music;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface AlbumService {

    /**
     * 创建专辑
     * @param dto
     * @param coverImage
     * @return
     */
    Album createAlbum(AlbumCreateDTO dto, MultipartFile coverImage);

    /**
     * 更新专辑
     * @param dto
     */
    void updateAlbum(AlbumUpdateDTO dto);

    /**
     * 删除专辑
     * @param id
     */
    void deleteAlbum(Integer id);

    /**
     * 根据 id 获取专辑
     * @param id
     * @return
     */
    Album getAlbumById(Integer id);

    /**
     * 添加音乐到专辑
     * @param albumId
     * @param musicId
     */
    void addMusicToAlbum(Integer albumId, Integer musicId);

    /**
     * 从专辑中移除音乐
     * @param albumId
     * @param musicId
     */
    void removeMusicFromAlbum(Integer albumId, Integer musicId);

    /**
     * 获取用户专辑
     * @param userId
     * @return
     */
    List<Album> getUserAlbums(Integer userId);

    /**
     * 获取用户专辑分页
     * @param userId
     * @param page
     * @param size
     * @return
     */
    Page<Album> getUserAlbumsPage(Integer userId, Integer page, Integer size);

    /**
     * 获取专辑分页
     * @param page
     * @param size
     * @return
     */
    Page<Album> getAlbumPage(Integer page, Integer size);

    /**
     * 获取专辑包含的音乐
     * @param albumId
     * @return
     */
    List<Music> getMusicByAlbumId(Integer albumId);

    /**
     * 获取专辑包含的音乐分页
     * @param albumId
     * @param page
     * @param size
     * @return
     */
    Page<Music> getMusicPageByAlbumId(Integer albumId, Integer page, Integer size);
}